import { IPSSysSFPlugin } from './ipssys-sfplugin';
import { IPSSubSysServiceAPI } from '../service/ipssub-sys-service-api';
import { IPSSystemModule } from '../system/ipssystem-module';
import { IPSModelObject } from '../ipsmodel-object';

/**
 *
 * @export
 * @interface IPSSysDataSyncAgent
 */
export interface IPSSysDataSyncAgent extends IPSModelObject {
  /**
   * 同步代理动态参数
   * @type {IModel}
   */
  agentParams: IModel;

  /**
   * 代理标记
   * @type {string}
   */
  agentTag: string;

  /**
   * 代理标记2
   * @type {string}
   */
  agentTag2: string;

  /**
   * 代理类型
   * @description 值模式 [平台数据同步代理类型] {KAFKA：Kafka、 RABBITMQ：RabbitMQ、 ACTIVEMQ：ActiveMQ、 MQTT：MQTT、 STOMP：STOMP、 WS：WebSocket、 INTERNAL：内部通讯、 USER：用户自定义、 USER2：用户自定义2、 USER3：用户自定义3、 USER4：用户自定义4 }
   * @type {( string | 'KAFKA' | 'RABBITMQ' | 'ACTIVEMQ' | 'MQTT' | 'STOMP' | 'WS' | 'INTERNAL' | 'USER' | 'USER2' | 'USER3' | 'USER4')}
   */
  agentType: string | 'KAFKA' | 'RABBITMQ' | 'ACTIVEMQ' | 'MQTT' | 'STOMP' | 'WS' | 'INTERNAL' | 'USER' | 'USER2' | 'USER3' | 'USER4';

  /**
   * 认证客户端标识
   * @type {string}
   */
  authClientId: string;

  /**
   * 认证客户端密码
   * @type {string}
   */
  authClientSecret: string;

  /**
   * 认证模式
   * @description 值模式 [系统服务接口认证模式] {NONE：无认证、 AUTHORIZATION_CODE：授权码模式、 PASSWORD：密码模式、 CLIENT_CREDENTIALS：客户端模式、 IMPLICIT：简化模式、 USER：用户自定义、 USER2：用户自定义2 }
   * @type {( string | 'NONE' | 'AUTHORIZATION_CODE' | 'PASSWORD' | 'CLIENT_CREDENTIALS' | 'IMPLICIT' | 'USER' | 'USER2')}
   */
  authMode: string | 'NONE' | 'AUTHORIZATION_CODE' | 'PASSWORD' | 'CLIENT_CREDENTIALS' | 'IMPLICIT' | 'USER' | 'USER2';

  /**
   * 认证参数
   * @type {string}
   */
  authParam: string;

  /**
   * 认证参数2
   * @type {string}
   */
  authParam2: string;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 消费组标识
   * @type {string}
   */
  groupId: string;

  /**
   * 外部服务接口
   *
   * @type {IPSSubSysServiceAPI}
   */
  getPSSubSysServiceAPI(): IPSSubSysServiceAPI | null;

  /**
   * 外部服务接口
   *
   * @type {IPSSubSysServiceAPI}
   */
  get psSubSysServiceAPI(): IPSSubSysServiceAPI | null;

  /**
   * 外部服务接口（必须存在）
   *
   * @type {IPSSubSysServiceAPI}
   */
  getPSSubSysServiceAPIMust(): IPSSubSysServiceAPI;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  get psSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块（必须存在）
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModuleMust(): IPSSystemModule;

  /**
   * 服务参数
   * @type {string}
   */
  serviceParam: string;

  /**
   * 服务参数2
   * @type {string}
   */
  serviceParam2: string;

  /**
   * 服务路径
   * @type {string}
   */
  servicePath: string;

  /**
   * 同步方向
   * @description 值模式 [平台数据同步方向] {IN：输入、 OUT：输出 }
   * @type {( string | 'IN' | 'OUT')}
   */
  syncDir: string | 'IN' | 'OUT';

  /**
   * 消息主题
   * @type {string}
   */
  topic: string;

  /**
   * 直接数据模式
   * @type {boolean}
   * @default false
   */
  rawDataMode: boolean;
}
